package com.navi.core.util;

import java.io.File;
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.util.Properties;  
import java.util.Vector;  
  
import com.jcraft.jsch.Channel;  
import com.jcraft.jsch.ChannelSftp;  
import com.jcraft.jsch.ChannelSftp.LsEntry;  
import com.jcraft.jsch.JSch;  
import com.jcraft.jsch.Session;  
import com.jcraft.jsch.SftpException;  
  
/** 
 *  sftp
 */  
public class SftpUtil {
  

    /** 
     * 连接sftp服务器 
     * @param host 主机 
     * @param port 端口 
     * @param username 用户名 
     * @param password 密码 
     * @return 
     */  
    public ChannelSftp connect(String host, int port, String username,  
            String password) {  
        ChannelSftp sftp = null;  
        try {  
            JSch jsch = new JSch();  
            jsch.getSession(username, host, port);  
            Session sshSession = jsch.getSession(username, host, port);  
            System.out.println("Session created.");  
            sshSession.setPassword(password);  
            Properties sshConfig = new Properties();  
            sshConfig.put("StrictHostKeyChecking", "no");  
            sshSession.setConfig(sshConfig);  
            sshSession.connect();  
            System.out.println("Session connected.");  
            System.out.println("Opening Channel.");  
            Channel channel = sshSession.openChannel("sftp");  
            channel.connect();  
            sftp = (ChannelSftp) channel;  
            System.out.println("Connected to " + host + ".");  
        } catch (Exception e) {  
            e.printStackTrace() ;  
        }  
        return sftp;  
    }  
  
    /** 
     * 上传文件 
     * @param directory 上传的目录 
     * @param uploadFile 要上传的文件 
     * @param sftp 
     */  
    public void upload(String directory, String uploadFile, ChannelSftp sftp) {  
        try {  
            sftp.cd(directory);  
            File file=new File(uploadFile);  
            sftp.put(new FileInputStream(file), file.getName());  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 下载文件 
     * @param serverDir 服务器路径
     * @param fileName 下载的文件名
     * @param localDir 本地路径
     * @param sftp 
     */  
    public void download(String serverDir, String fileName,String localDir, ChannelSftp sftp) {
        try {  
            sftp.cd(serverDir);
            File file=new File(localDir + "/" + fileName);
            sftp.get(fileName, new FileOutputStream(file));
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 删除文件 
     * @param directory 要删除文件所在目录 
     * @param deleteFile 要删除的文件 
     * @param sftp 
     */  
    public void delete(String directory, String deleteFile, ChannelSftp sftp) {  
        try {  
            sftp.cd(directory);  
            sftp.rm(deleteFile);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 列出目录下的文件 
     * @param directory 要列出的目录 
     * @param sftp 
     * @return 
     * @throws SftpException 
     */    
    @SuppressWarnings("unchecked")  
    public Vector<LsEntry> listFiles(String directory, ChannelSftp sftp) throws SftpException{  
        return sftp.ls(directory);  
    }  
}